package cn.lyjuan.pojoutils.template;

import cn.lyjuan.pojoutils.bean.ColumnBean;
import cn.lyjuan.pojoutils.bean.TableBean;

import java.util.List;

/**
 * 生成 Mapper XML 文件模版接口
 * Created by ly on 2014/11/21.
 */
public interface IMapperXMLTemplate
{
    /**
     * 生成 Mapper 接口 XML 文件，调用该方法即可获取完整XML文件，内部需要分别依次调用<br />
     * genSelect、genInsert、genUpdate 和 genDelete
     * @param tableBean
     * @param cols
     * @return
     */
    String genMapperXml(TableBean tableBean, List<ColumnBean> cols);

    /**
     * 生成查询接口部分，包含<br />
     * <p>
     * 副XML部分：<br />
     *      1. resultMap:baseResultMap<br />
     *      2. sql:selectName<br />
     *      3. sql:selectWhere
     * </p>
     * <p>
     * 主XML部分：<br />
     *      1. select 查询单个<br />
     *      2. selects 查询列表<br />
     *      3. selectBy{主键}，根据主键查询单个，如果没有主键，则没有该方法<br />
     *      4. selecgForPage 分页查询
     * </p>
     * @param tableBean
     * @param cols
     * @return
     *              返回两个元素，第一个为副XML部分，第二个为主XML部分
     */
    String[] genSelect(TableBean tableBean, List<ColumnBean> cols);

    /**
     * 生成添加接口部分，包含<br />
     * <p>
     * 副XML部分：<br />
     *      1. insertName 添加字段名称<br />
     *      2. insertValue 添加字段值<br />
     * </p>
     * <p>
     * 主XML部分：<br />
     *      1. insert 根据POJO对象添加表数据<br />
     * </p>
     * @param tableBean
     * @param cols
     * @return
     */
    String[] genInsert(TableBean tableBean, List<ColumnBean> cols);

    /**
     * 生成更新接口部分，包含<br />
     * <p>
     * 副XML部分：<br />
     *      1. updateSet 更新的 SET SQL语句
     * </p>
     * <p>
     * 主XML部分：<br />
     *      1. updateBy{主键} 根据主键更新，如果没有主键，则没有该方法<br />
     * </p>
     * @param tableBean
     * @param cols
     * @return
     */
    String[] genUpdate(TableBean tableBean, List<ColumnBean> cols);

    /**
     * 生成删除接口部分，包含<br />
     * <p>
     * 主XML部分：<br />
     *      1. deleteBy{主键} 根据主键删除，如果没有主键，则没有该方法<br />
     *      2. delete 根据POJO对象删除<br />
     * </p>
     * @param tableBean
     * @param cols
     * @return
     */
    String[] genDelete(TableBean tableBean, List<ColumnBean> cols);
}
